package com.lhf.dajiuye.utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.lhf.dajiuye.domain.User;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.util.encoders.Base64;
import org.springframework.util.StringUtils;

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.AlgorithmParameters;
import java.security.Security;
import java.util.Arrays;
import java.util.Date;
import java.util.Map;


public class WxUtil {
    /**
     * 过滤微信解密后的用户信息
     * @param realMsg
     * @return
     */
    public static Map strToMap(String realMsg){
        if(!StringUtils.hasLength(realMsg)){
            return null;
        }
        Map jsonMap = JSON.parseObject(realMsg, Map.class);
        if(jsonMap.getOrDefault("watermark","null")!=null){
            // watermark里面有appId,出于安全剔除它
            jsonMap.remove("watermark");
        }
//        Object openId=jsonMap.get("openid");
//        if(StringUtils.hasLength(openId)){
//            // openId进行加密返回客户端
//            String encryptId = EncryptUtil.encryptUtil(openId);
//            jsonMap.put("myEncrypt",encryptId);
//        }
        return jsonMap;
//        if(obj instanceof Map){
//            System.out.println("环绕通知：返回值是map类型");
//            Map ret=(Map) obj;
//            String realMsg = (String) ret.get("realMsg");
//            String sessionKey = (String)ret.get("session_key");
//            String openId=(String) ret.get("openid");
//
////            if(realMsg==null){
////                // 解析失败
////                System.out.println("===========msg为null,获取数据失败");
////                return "msg为null";
////            }
//            // 存储解密后的用户数据的map
////            Map jsonMap = JSON.parseObject(realMsg, Map.class);
//
////            if(jsonMap.getOrDefault("watermark","null")!=null){
////                // watermark里面有appId,出于安全剔除它
////                jsonMap.remove("watermark");
////            }
//
////            if(StringUtils.hasLength(openId)){
////                // openId进行加密返回客户端
////                String encryptId = EncryptUtil.encryptUtil(openId);
////                jsonMap.put("myEncrypt",encryptId);
////            }
//
//            String id=null;
//            String nickName = (String)jsonMap.get("nickName");
//            int gender = (int)jsonMap.get("gender");
////        String language = (String)jsonMap.get("language");
//            String city = (String)jsonMap.get("city");
//            String province = (String)jsonMap.get("province");
////        String country = (String)jsonMap.get("country");
//            String avatarUrl = (String)jsonMap.get("avatarUrl");
////        Date lastLoginTime=new SimpleDateFormat("YYYY-MM-dd HH:mm:ss").format(new Date());
//            Date lastLoginTime=new Date();
//
//            User user = userService.getUserByOpenId(openId);
//
//            log.info("查询到openId为{}的user是:{}===============",openId,user);
//
//            if(user!=null){
//                id = user.getId();
//                String resume = user.getResume();
//                String comId = user.getComId();
//                // jsonMap的数据添加用户id和简历，方便发送简历的时候获取
//                jsonMap.put("resume",resume);
//                jsonMap.put("comId",comId);
//
//                user.setSessionKey(sessionKey);
//                user.setNickName(nickName);
//                user.setGender(gender);
//                user.setCity(city);
//                user.setProvince(province);
//                user.setAvatar(avatarUrl);
//                int i = userService.updateUser(user);
//                System.out.println("com.lhf.dajiuye.aspect.PostSaveAspect.around：更新user后i=========="+i);
//            }else {
//                // 当前为新用户
//                User newUser = new User();
////                newUser.setId(id);
//                newUser.setOpenId(openId);
//                newUser.setSessionKey(sessionKey);
//                newUser.setNickName(nickName);
//                newUser.setGender(gender);
//                newUser.setCity(city);
//                newUser.setProvince(province);
//                newUser.setAvatar(avatarUrl);
//                id = String.valueOf(userService.saveUser(newUser));
//            }
//            // 添加id到返回结果中，方便前端获取id
//            jsonMap.put("id",id);
//            obj=jsonMap;
//        }
//        return obj;
    }

//    public static JSONObject preGetUserInfo(String code, String encryptedData, String iv){
//        // 获取sessionKey
//        String appid;
//        String secret;
//        String js_code;
//
//        return getUserInfo(code, encryptedData, iv);
//    }
//    public static JSONObject getUserInfo(String encryptedData, String sessionKey, String iv){
//        // 被加密的数据
//        byte[] dataByte = Base64.decode(encryptedData);
//        // 加密秘钥
//        byte[] keyByte = Base64.decode(sessionKey);
//        // 偏移量
//        byte[] ivByte = Base64.decode(iv);
//
//        try {
//            // 如果密钥不足16位，那么就补足.  这个if 中的内容很重要
//            int base = 16;
//            if (keyByte.length % base != 0) {
//                int groups = keyByte.length / base + (keyByte.length % base != 0 ? 1 : 0);
//                byte[] temp = new byte[groups * base];
//                Arrays.fill(temp, (byte) 0);
//                System.arraycopy(keyByte, 0, temp, 0, keyByte.length);
//                keyByte = temp;
//            }
//            // 初始化
//            Security.addProvider(new BouncyCastleProvider());
//            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding","BC");
//            SecretKeySpec spec = new SecretKeySpec(keyByte, "AES");
//            AlgorithmParameters parameters = AlgorithmParameters.getInstance("AES");
//            parameters.init(new IvParameterSpec(ivByte));
//            cipher.init(Cipher.DECRYPT_MODE, spec, parameters);// 初始化
//            byte[] resultByte = cipher.doFinal(dataByte);
//            if (null != resultByte && resultByte.length > 0) {
//                String result = new String(resultByte, "UTF-8");
//                return JSONObject.parseObject(result);
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return null;
//    }
}
